home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
jed10.zip
/
EAT3.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-02-26
|
8KB
|
215 lines
;---------------------------------------------------------------
; EAT3.ASM
; Backhanded advertising program, over the full screen
;
; by Jeff Duntemann
; MASM/TASM
; Last update 12/27/89
;---------------------------------------------------------------
;----------------------------|
; BEGIN STACK SEGMENT |
;----------------------------|
MYSTACK SEGMENT STACK ; STACK word ensures loading of SS by DOS
DB 64 DUP ('STACK!!!') ; This reserves 512 bytes for the stack
MYSTACK ENDS
;----------------------------|
; END STACK SEGMENT |
;----------------------------|
;----------------------------|
; BEGIN DATA SEGMENT |
;----------------------------|
MyData SEGMENT
; 18H = 24D; 4FH = 79D; Combined 0-based X,Y of 80 x 25 screen LR corner:
LRXY DW 184FH
TextPos DW ?
Eat1 DB "Eat at Joe's...",'$'
Eat2 DB "...ten million flies can't ALL be wrong!",'$'
CRLF DB 0DH,0AH,'$'
MyData ENDS
;----------------------------|
; END DATA SEGMENT |
;----------------------------|
;----------------------------|
; BEGIN CODE SEGMENT |
;----------------------------|
MyProg SEGMENT
assume CS:MyProg,DS:MyData
Main PROC
Start: ; This is where program execution begins:
mov AX,MyData ; Set up our own data segment address in DS
mov DS,AX ; Can't load segment reg. directly from memory
call ClrScr ; Clear the full display
mov TextPos, 0914H ; 0914H = X @ 20, Y @ 9
mov DX,TextPos ; TextPos contains X,Y position values
call GotoXY ; Position cursor
lea DX,Eat1 ; Load offset of Eat1 string into DX
call Write ; and display it
mov DX,TextPos ; Re-use text position variable
mov DH,10 ; Put new Y value into DH
call GotoXY ; Position cursor
lea DX,Eat2 ; Load offset of Ear2 string into DX
call Writeln ; and display it
mov AH,4CH ; Terminate process DOS service
mov AL,0 ; Pass this value back to ERRORLEVEL
int 21H ; Control returns to DOS
;----------------------------|
; PROCEDURE SECTION |
;----------------------------|
;---------------------------------------------------------------
; GOTOXY -- Positions the hardware cursor to X,Y
; Last update 3/5/89
;
; 1 entry point:
;
; GotoXY:
; Caller must pass:
; DL: X value These are both 0-based; i.e., they
; DH: Y value assume a screen 24 by 79, not 25 by 80
; Action: Moves the hardware cursor to the X,Y position
; loaded into DL and H.
;---------------------------------------------------------------
GotoXY PROC
mov AH,02H ; Select VIDEO service 2: Position cursor
mov BH,0 ; Stay with display page 0
int 10H ; Call VIDEO
ret ; Return to the caller
GotoXY ENDP
;---------------------------------------------------------------
; CLRSCR -- Clears or scrolls screens or windows
; Last update 3/5/89
;
; 4 entry points:
;
; ClrScr:
; No values expected from caller
; Action: Clears the entire screen to blanks with 07H as
; the display attribute
;
; ClrWin:
; Caller must pass:
; CH: Y coordinate, upper left corner of window
; CL: X coordinate, upper left corner of window
; DH: Y coordinate, lower right corner of window
; DL: X coordinate, lower right corner of window
; Action: Clears the window specified by the caller to
; blanks with 07H as the display attribute
;
; ScrlWin:
; Caller must pass:
; CH: Y coordinate, upper left corner of window
; CL: X coordinate, upper left corner of window
; DH: Y coordinate, lower right corner of window
; DL: X coordinate, lower right corner of window
; AL: number of lines to scroll window by (0 clears it)
; Action: Scrolls the window specified by the caller by
; the number of lines passed in AL. The blank
; lines inserted at screen bottom are cleared
; to blanks with 07H as the display attribute
;
; VIDEO6:
; Caller must pass:
; CH: Y coordinate, upper left corner of window
; CL: X coordinate, upper left corner of window
; DH: Y coordinate, lower right corner of window
; DL: X coordinate, lower right corner of window
; AL: number of lines to scroll window by (0 clears it)
; BH: display attribute for blanked lines (07H is "normal")
; Action: Generic access to BIOS VIDEO service 6. Caller
; must pass ALL register parameters as shown above
;---------------------------------------------------------------
ClrScr PROC
mov CX,0 ; Upper left corner of full screen
mov DX,LRXY ; Load lower-right XY coordinates into DX
ClrWin: mov AL,0 ; 0 specifies clear entire region
ScrlWin: mov BH,07H ; Specify "normal" attribute for blanked line(s)
VIDEO6: mov AH,06H ; Select VIDEO service 6: Initialize/Scroll
int 10H ; Call VIDEO
ret ; Return to the caller
ClrScr ENDP
;---------------------------------------------------------------
; WRITE -- Displays information to the screen via DOS
; service 9: Print String
; Last update 3/5/89
;
; 1 entry point:
;
; Write:
; Caller must pass:
; DS: The segment of the string to be displayed
; DX: The offset of the string to be displayed
; String must be terminated by "$"
; Action: Displays the string at DS:DX up to the "$" marker
;---------------------------------------------------------------
Write PROC
mov AH,09H ; Select DOS service 9: Print String
int 21H ; Call DOS
ret ; Return to the caller
Write ENDP
;---------------------------------------------------------------
; WRITELN -- Displays information to the screen via DOS
; service 9 and issues a newline
; Last update 3/5/89
;
; 1 entry point:
;
; Writeln:
; Caller must pass:
; DS: The segment of the string to be displayed
; DX: The offset of the string to be displayed
; String must be terminated by "$"
; Action: Displays the string at DS:DX up to the "$" marker
; marker, then issues a newline. Hardware cursor
; will move to the left margin of the following
; line. If the display is to the bottom screen
; line, the screen will scroll.
; Calls: Write
;---------------------------------------------------------------
Writeln PROC
call Write ; Display the string proper through Write
mov DX,OFFSET CRLF ; Load address of newline string to DS:DX
call Write ; Display the newline string through Write
ret ; Return to the caller
Writeln ENDP
;----------------------------|
; END PROCEDURE SECTION |
;----------------------------|
Main ENDP
MyProg ENDS
;----------------------------|
; END CODE SEGMENT |
;----------------------------|
END Start ; The procedure named Start becomes the main program